package com.lpf.mybatis.executor.impl;

import com.lpf.mybatis.config.Configuration;
import com.lpf.mybatis.config.MapperRegistry;
import com.lpf.mybatis.executor.Executor;
import com.lpf.mybatis.statement.StatementHandler;
import lombok.Data;

/**
 * 功能描述：简单执行器
 *
 * 直接从数据库获取数据。
 */
@Data
@SuppressWarnings("all")
public class SimpleExecutor implements Executor {

    private Configuration configuration;

    public SimpleExecutor(Configuration configuration) {
        this.configuration = configuration;
    }

    /**
     * 功能描述：执行查询
     *
     * @param mapperData 根据 statementId 在 MapperRegistry 中找到的配置信息（sql、实体类型等）
     * @param parameter  设置到 sql 语句中的数据
     * @return E
     */
    public <E> E query(MapperRegistry.MapperData mapperData, Object parameter) throws Exception {

        //初始化StatementHandler --> ParameterHandler --> ResultSetHandler
        StatementHandler handler = new StatementHandler(configuration);

        return (E) handler.query(mapperData, parameter);
    }
}